home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 3 / Gold Medal Software - Volume 3 (Gold Medal) (1994).iso / windows / editprog / newvisda.arj / DYNAGRID.FRM < prev    next >
Text File  |  1994-04-02  |  19KB  |  736 lines

  1. VERSION 2.00
  2. Begin Form fGridFrm 
  3.    BackColor       =   &H00C0C0C0&
  4.    ClientHeight    =   3105
  5.    ClientLeft      =   930
  6.    ClientTop       =   3585
  7.    ClientWidth     =   6690
  8.    Height          =   3570
  9.    Icon            =   DYNAGRID.FRX:0000
  10.    Left            =   840
  11.    LinkTopic       =   "Form1"
  12.    MDIChild        =   -1  'True
  13.    ScaleHeight     =   3096
  14.    ScaleMode       =   0  'User
  15.    ScaleWidth      =   6708
  16.    Tag             =   "Dynaset"
  17.    Top             =   3210
  18.    Width           =   6870
  19.    Begin Grid cGrid 
  20.       FixedCols       =   0
  21.       FixedRows       =   0
  22.       Height          =   2412
  23.       Left            =   0
  24.       TabIndex        =   0
  25.       Top             =   480
  26.       Width           =   6732
  27.    End
  28.    Begin PictureBox ViewButtons 
  29.       BackColor       =   &H00C0C0C0&
  30.       BorderStyle     =   0  'None
  31.       Height          =   375
  32.       Left            =   0
  33.       ScaleHeight     =   372
  34.       ScaleMode       =   0  'User
  35.       ScaleWidth      =   5171.607
  36.       TabIndex        =   1
  37.       Top             =   24
  38.       Width           =   5175
  39.       Begin CommandButton SortButton 
  40.          Caption         =   "&Sort"
  41.          Height          =   372
  42.          Left            =   3720
  43.          TabIndex        =   9
  44.          Top             =   0
  45.          Width           =   612
  46.       End
  47.       Begin CommandButton FilterButton 
  48.          Caption         =   "Fil&ter"
  49.          Height          =   372
  50.          Left            =   3120
  51.          TabIndex        =   8
  52.          Top             =   0
  53.          Width           =   612
  54.       End
  55.       Begin CommandButton RefreshButton 
  56.          Caption         =   "&Redo"
  57.          Height          =   372
  58.          Left            =   2520
  59.          TabIndex        =   7
  60.          Top             =   0
  61.          Width           =   612
  62.       End
  63.       Begin CommandButton CloseButton 
  64.          Cancel          =   -1  'True
  65.          Caption         =   "&Close"
  66.          Height          =   372
  67.          Left            =   4320
  68.          TabIndex        =   6
  69.          Top             =   0
  70.          Width           =   612
  71.       End
  72.       Begin CommandButton MoreButton 
  73.          Caption         =   "&More"
  74.          Height          =   372
  75.          Left            =   1320
  76.          TabIndex        =   5
  77.          Top             =   0
  78.          Width           =   612
  79.       End
  80.       Begin CommandButton NextButton 
  81.          Caption         =   "&Next"
  82.          Height          =   372
  83.          Left            =   120
  84.          TabIndex        =   4
  85.          Top             =   0
  86.          Width           =   612
  87.       End
  88.       Begin CommandButton FirstButton 
  89.          Caption         =   "&First"
  90.          Height          =   372
  91.          Left            =   720
  92.          TabIndex        =   3
  93.          Top             =   0
  94.          Width           =   612
  95.       End
  96.       Begin CommandButton FindButton 
  97.          Caption         =   "F&ind"
  98.          Height          =   372
  99.          Left            =   1920
  100.          TabIndex        =   2
  101.          Top             =   0
  102.          Width           =   612
  103.       End
  104.    End
  105. End
  106. Option Explicit
  107.  
  108. 'form variables
  109. 'Dim FDS As dynaset         'current form's dynaset
  110. Dim FDS As snapshot        'current form's snapshot
  111. Dim FDynSt As String       'dynaset open string
  112. Dim FTblName As String     'form dynaset table name
  113. Dim FCurrentRow As Long    'current row in dynaset
  114. Dim FGridRow As Integer    'current grid row
  115. Dim FNotFound As Integer   'find not found flag
  116. Dim FFindForm As New fFind 'find form
  117. Dim FNumbRows As Long      'total number of rows in table
  118. Dim FDynaString As String  'dynaset open string
  119.  
  120. Sub cGrid_DblClick ()
  121.   Dim r As Integer       'return from execute sql
  122.   Dim fn As String       'field name
  123.  
  124.   On Error GoTo ZoomErr
  125.   r = cGrid.Row
  126.   cGrid.Row = 0
  127.   'get field name
  128.   fn = cGrid.Text
  129.   cGrid.Row = r
  130.  
  131.   'make sure it's a string or memo field
  132.   If FDS(fn).Type = FT_STRING Or FDS(fn).Type = FT_MEMO Then
  133.      gstZoomData = cGrid.Text
  134.      fZoom.Caption = fn
  135.      fZoom.Top = Top + 1200
  136.      fZoom.Left = Left + 250
  137.      fZoom.CloseZoomButton.Visible = True
  138.      fZoom.Show MODAL
  139.   End If
  140.   GoTo ZoomEnd
  141.  
  142. ZoomErr:
  143.   ShowError
  144.   Resume ZoomEnd
  145.  
  146. ZoomEnd:
  147.  
  148. End Sub
  149.  
  150. Sub cGrid_KeyUp (KeyCode As Integer, Shift As Integer)
  151.   'zoom on F4 key press
  152.   If KeyCode = &H73 Then   'F4
  153.     cGrid_DblClick
  154.   End If
  155. End Sub
  156.  
  157. Sub CloseButton_Click ()
  158.   Unload Me
  159. End Sub
  160.  
  161. Sub FilterButton_Click ()
  162.   On Error GoTo FilterErr
  163.  
  164. '  Dim ds1 As dynaset, ds2 As dynaset
  165.   Dim ds1 As snapshot, ds2 As snapshot
  166.   
  167.   Dim numbrows As Long    'local number of rows
  168.  
  169.   Set ds1 = FDS            'save the dynaset
  170.   
  171.  Dim i As Integer, r As Integer, c As Integer
  172.  
  173.    'On Error GoTo FindErr
  174.  
  175.    'load the column names into the filter form
  176.    'the 1st time it is loaded
  177.    If fFilter.cFieldList.ListCount = 0 Then
  178.      fFilter.cFieldList.Clear
  179.      r = cGrid.Row
  180.      c = cGrid.Col
  181.      cGrid.Row = 0
  182.      cGrid.Col = 0
  183.      For i = 1 To cGrid.Cols - 1
  184.        cGrid.Col = cGrid.Col + 1
  185.        fFilter.cFieldList.AddItem cGrid.Text
  186.      Next
  187.      cGrid.Row = r
  188.      cGrid.Col = c
  189.    End If
  190.  
  191.    MsgBar "Enter Search Parameters", False
  192.  
  193.   fFilter.Show MODAL
  194.  
  195.  
  196.   'FilterStr = InputBox("Enter Filter Expression:")
  197.   If FilterStr = "" Then Exit Sub
  198.  
  199.   FDS.Filter = FilterStr
  200. '  Set ds2 = FDS.CreateDynaset()            'establish the filter
  201.   Set ds2 = FDS.CreateSnapshot()            'establish the filter
  202.   Set FDS = ds2            'assign back to original dynaset object
  203.  
  204.   'everything must be okay so redisplay form on 1st record
  205.   FNumbRows = GetNumbRecsSS(FDS)          'query numb of recs
  206.    If FNumbRows = -1 Then
  207.      'error occurred but go on anyway
  208.      'because row count is non-critical
  209.      Caption = "Dynaset: " + FTblName
  210.      numbrows = gwMaxGridRows
  211.      FCurrentRow = numbrows
  212.    ElseIf FNumbRows = 0 Then
  213.      Beep
  214.      MsgBox "No Records found!", 48
  215.      
  216.      ResetMouse Me
  217.      Unload Me
  218.      Exit Sub
  219.    ElseIf FNumbRows > gwMaxGridRows Then
  220.      Caption = "Dynaset: " + FTblName + " [" + CStr(FNumbRows) + " total rows]"
  221.      numbrows = gwMaxGridRows
  222.      FCurrentRow = numbrows
  223.    Else
  224.      numbrows = FNumbRows
  225.      Caption = "Dynaset: " + FTblName + " [" + CStr(FNumbRows) + " rows]"
  226.    End If
  227.   If LoadGrid(cGrid, FDS, FDynSt, numbrows, 0) = False Then
  228.     Unload Me
  229.     Exit Sub
  230.   End If
  231.   GoTo FilterEnd
  232.  
  233. FilterErr:
  234.   ShowError
  235.   Set FDS = ds1            're-assign back to original
  236.   Resume FilterEnd
  237.  
  238. FilterEnd:
  239.  
  240. End Sub
  241.  
  242. Sub FindButton_Click ()
  243.    Dim i As Integer, r As Integer, c As Integer
  244.  
  245.    On Error GoTo FindErr
  246.  
  247.    'load the column names into the find form
  248.    'the 1st time it is loaded
  249.    If FFindForm.cFieldList.ListCount = 0 Then
  250.      FFindForm.cFieldList.Clear
  251.      r = cGrid.Row
  252.      c = cGrid.Col
  253.      cGrid.Row = 0
  254.      cGrid.Col = 0
  255.      For i = 1 To cGrid.Cols - 1
  256.        cGrid.Col = cGrid.Col + 1
  257.        FFindForm.cFieldList.AddItem cGrid.Text
  258.      Next
  259.      cGrid.Row = r
  260.      cGrid.Col = c
  261.    End If
  262.  
  263. FindStart:       'used to loop around on not found
  264.  
  265.    'reset the flags
  266.    gfFindFailed = False
  267.    gfFromTableView = True
  268.  
  269.    MsgBar "Enter Search Parameters", False
  270.  
  271.    FFindForm.Show MODAL
  272.   
  273.    MsgBar "Searching for record", True
  274.  
  275.    If gfFindFailed = True Then Exit Sub
  276.  
  277.    FNotFound = False
  278.  
  279.    SetHourGlass Me
  280.  
  281.    'search for the record
  282.    cGrid.SetFocus        'start at the top
  283.    SendKeys "^{Home}"
  284.    cGrid.Col = 1
  285.    cGrid.Row = 0
  286.    'move the right column
  287.    While cGrid.Text <> UCase(gstFindField)
  288.      If cGrid.Col = cGrid.Cols Then 'reached max col
  289.      Else
  290.        cGrid.Col = cGrid.Col + 1
  291.        SendKeys "{Right}"
  292.      End If
  293.    Wend
  294.    cGrid.Row = 1
  295.    While cGrid.Row < cGrid.Rows - 1
  296.        If gfFindMatch = False Then
  297.          Select Case gstFindOp
  298.            Case "="
  299.              If UCase(cGrid.Text) = UCase(gstFindExpr) Then GoTo AfterWhile
  300.            Case "<>"
  301.              If UCase(cGrid.Text) <> UCase(gstFindExpr) Then GoTo AfterWhile
  302.            Case ">="
  303.              If UCase(cGrid.Text) >= UCase(gstFindExpr) Then GoTo AfterWhile
  304.            Case "<="
  305.              If UCase(cGrid.Text) <= UCase(gstFindExpr) Then GoTo AfterWhile
  306.            Case ">"
  307.              If UCase(cGrid.Text) > UCase(gstFindExpr) Then GoTo AfterWhile
  308.            Case "<"
  309.              If UCase(cGrid.Text) < UCase(gstFindExpr) Then GoTo AfterWhile
  310.            Case "Like"
  311.              If UCase(cGrid.Text) Like UCase(gstFindExpr) Then GoTo AfterWhile
  312.          End Select
  313.        Else
  314.          Select Case gstFindOp
  315.            Case "="
  316.              If cGrid.Text = gstFindExpr Then GoTo AfterWhile
  317.            Case "<>"
  318.              If cGrid.Text <> gstFindExpr Then GoTo AfterWhile
  319.            Case ">="
  320.              If cGrid.Text >= gstFindExpr Then GoTo AfterWhile
  321.            Case "<="
  322.              If cGrid.Text <= gstFindExpr Then GoTo AfterWhile
  323.            Case ">"
  324.              If cGrid.Text > gstFindExpr Then GoTo AfterWhile
  325.            Case "<"
  326.              If cGrid.Text < gstFindExpr Then GoTo AfterWhile
  327.            Case "Like"
  328.              If cGrid.Text Like gstFindExpr Then GoTo AfterWhile
  329.          End Select
  330.        End If
  331.      cGrid.Row = cGrid.Row + 1
  332.      SendKeys "{Down}"
  333.    Wend
  334.    FNotFound = True       'didn't find it
  335.  
  336. AfterWhile:
  337.    ResetMouse Me
  338.  
  339.    'show the first record
  340.    If FNotFound Then
  341.      Beep
  342.      MsgBox "Record Not Found", 48
  343.      GoTo FindStart
  344.    End If
  345.    DoEvents
  346.    cGrid.SelStartRow = cGrid.Row
  347.    cGrid.SelStartCol = 1
  348.    cGrid.SelEndRow = cGrid.Row
  349.    cGrid.SelEndCol = FDS.Fields.Count
  350.  
  351.    GoTo FindEnd
  352.  
  353. FindErr:
  354.    ResetMouse Me
  355.    ShowError
  356.    Resume FindEnd
  357.  
  358. FindEnd:
  359.    MsgBar "", False
  360.  
  361. End Sub
  362.  
  363. Sub FirstButton_Click ()
  364.    Dim numbrows As Long         'number of rows
  365.  
  366.    On Error GoTo GoFirstError
  367.  
  368.    SetHourGlass Me
  369.    MsgBar "Going to first record", True
  370.    cGrid.SetFocus
  371.    cGrid.Row = 1
  372.    cGrid.Col = 0
  373.    'get current starting row in grid
  374.    If cGrid.Text <> "1" Then
  375.      FDS.Close
  376. '     Set FDS = gCurrentDB.CreateDynaset(FDS.Name)
  377.      Set FDS = gCurrentDB.CreateSnapshot(FDS.Name)
  378.  
  379.      FNumbRows = GetNumbRecsSS(FDS)
  380.      If FNumbRows > gwMaxGridRows Then
  381.        numbrows = gwMaxGridRows
  382.        FCurrentRow = numbrows
  383.      Else
  384.        numbrows = FNumbRows
  385.      End If
  386.  
  387.      If LoadGrid(cGrid, FDS, FDynSt, numbrows, 0) = False Then
  388.        Unload Me
  389.        Exit Sub
  390.      End If
  391.   End If
  392.   cGrid.Col = 1
  393.   SendKeys "{Home}"
  394.  
  395.   GoTo GoFirstEnd
  396.  
  397. GoFirstError:
  398.   ShowError
  399.   Resume GoFirstEnd
  400.  
  401. GoFirstEnd:
  402.   ResetMouse Me
  403.   MsgBar "", False
  404.  
  405. End Sub
  406.  
  407. Sub Form_Load ()
  408.    Dim t As TableDef       'local table structure
  409.    Dim sp As Integer       'starting point of table name
  410.    Dim ep As Integer       'ending point of table name
  411.    Dim wh As String        'where clause
  412.  
  413.    Dim i As Integer, j As Integer
  414.    Dim fn As String        'field name
  415.    Dim rc As Integer       'record count
  416.    Dim numbrows As Long    'local number of rows
  417.    Dim ss As snapshot
  418.  
  419.    Dim Start1, Finish1, Start2, Finish2
  420.  
  421.    On Error GoTo DynasetErr
  422.  
  423.    SetHourGlass Me
  424.    MsgBar "Opening Dynaset", True
  425.  
  426.    'assign the temp string with the select statement
  427.    'if it is not empty, otherwise, use the table list name
  428.    If gfFromSQL = True Then
  429.      If gstDynaString = "" Then
  430.        FDynSt = fSQL.cSQLStatement
  431.      Else
  432.        FDynSt = gstDynaString
  433.      End If
  434.    Else
  435.      FDynSt = fTables.cTableList
  436.    End If
  437.  
  438.    'attemp to open the dynaset
  439.    Start1 = Timer
  440.    If UCase(FDynSt) = "LISTTABLES" Then
  441.      Set FDS = gCurrentDB.ListTables()
  442.    Else
  443.      If gfFromSQL = True And fSQL.cPassThru = 1 Then
  444. '       Set FDS = gCurrentDB.CreateDynaset(FDynSt, VBDA_SQLPASSTHROUGH)
  445.        Set FDS = gCurrentDB.CreateSnapshot(FDynSt, VBDA_SQLPASSTHROUGH)
  446.      Else
  447. '       Set FDS = gCurrentDB.CreateDynaset(FDynSt)
  448.        Set FDS = gCurrentDB.CreateSnapshot(FDynSt)
  449.      End If
  450.    End If
  451.    Finish1 = Timer
  452.  
  453.    Start2 = Timer
  454.    'parse off table name to store in global gstTblName
  455.    wh = ""
  456.    sp = InStr(1, UCase(FDynSt), "FROM")
  457.    If sp > 0 Then
  458.      'must be a "select from" statement
  459.      sp = sp + 5
  460.      For ep = sp To Len(FDynSt)
  461.        'search for a space or the end of FDynSt
  462.        If Mid$(FDynSt, ep, 1) = " " Then
  463.          'get where clause if there is one
  464.          wh = Mid$(FDynSt, sp, Len(FDynSt) - sp + 1)
  465.          Exit For
  466.        End If
  467.      Next
  468.      FTblName = UCase(Mid$(FDynSt, sp, ep - sp))
  469.      If wh = "" Then wh = FTblName
  470.    Else
  471.      'must be a table name only
  472.      FTblName = UCase(FDynSt)
  473.      wh = FTblName
  474.    End If
  475.  
  476.    FDynaString = wh
  477.  
  478.    'show the first record
  479.    FNumbRows = GetNumbRecsSS(FDS)          'query numb of recs
  480.  
  481.    If FNumbRows = -1 Then
  482.      'error occurred but go on anyway
  483.      'because row count is non-critical
  484.      Caption = "SnapShot: " + FTblName
  485.      numbrows = gwMaxGridRows
  486.      FCurrentRow = numbrows
  487.    ElseIf FNumbRows = 0 Then
  488.      Beep
  489.      MsgBox "No Records found!", 48
  490.      ResetMouse Me
  491.      Unload Me
  492.      Exit Sub
  493.    ElseIf FNumbRows > gwMaxGridRows Then
  494.      Caption = "SnapShot: " + FTblName + " [" + CStr(FNumbRows) + " total rows]"
  495.      numbrows = gwMaxGridRows
  496.      FCurrentRow = numbrows
  497.    Else
  498.      numbrows = FNumbRows
  499.      Caption = "SnapShot: " + FTblName + " [" + CStr(FNumbRows) + " rows]"
  500.    End If
  501.  
  502.    If LoadGrid(cGrid, FDS, FDynSt, numbrows, 0) = False Then
  503.      ResetMouse Me
  504.      Unload Me
  505.      Exit Sub
  506.    End If
  507.    If numbrows < 50 Then
  508.    Height = 3800 + numbrows * 20
  509.    Else
  510.    Height = 5000
  511.    End If
  512.    Width = 5450 + SumColwid / 2
  513.    'Left = 1000
  514.    'Top = 1000
  515.  
  516.    Finish2 = Timer
  517.    If VDMDI.PrefShowPerf.Checked Then
  518.      Me.Show
  519.      MsgBox CStr(FNumbRows) + " rows found in " + CStr(Finish1 - Start1) + " seconds!" + Chr(13) + Chr(10) + CStr(Finish2 - Start2) + " seconds to Load Grid!", 48
  520.    End If
  521.  
  522.    GoTo OkayEnd
  523.  
  524. DynasetErr:
  525.    ShowError
  526.    ResetMouse Me
  527.    MsgBar "", False
  528.    ResetMouse Me
  529.    Unload Me
  530.    Exit Sub
  531.    Resume OkayEnd
  532.  
  533. OkayEnd:
  534.    ResetMouse Me
  535.    MsgBar "", False
  536.  
  537. End Sub
  538.  
  539. Sub Form_Resize ()
  540.   On Error Resume Next
  541.  
  542.   'resize grid to window
  543.   If WindowState <> 1 Then   'not minimized
  544.     cGrid.Height = Height - 900
  545.     cGrid.Width = Width - 100
  546.   End If
  547. End Sub
  548.  
  549. Sub Form_Unload (Cancel As Integer)
  550.   On Error Resume Next
  551.  
  552.   'unload the find form
  553.   Unload FFindForm
  554.  
  555.   'close the associated dynaset
  556.   FDS.Close
  557.   MsgBar "", False
  558. End Sub
  559.  
  560. Sub MoreButton_Click ()
  561.   Dim ret As Integer   'return value from loadgrid
  562.  
  563.   On Error Resume Next
  564.  
  565.   MsgBar "Getting more records", True
  566.   If FDS.EOF <> True Then
  567.     SetHourGlass Me
  568.  
  569.     ret = LoadGrid(cGrid, FDS, FDynSt, gwMaxGridRows, FCurrentRow)
  570.     If ret = False Then
  571.       'failed so bail out of form
  572.       FDS.Close
  573.       Unload Me
  574.     End If
  575.     'set new current row
  576.     FCurrentRow = FCurrentRow + ret
  577.  
  578.     ResetMouse Me
  579.   End If
  580.   MsgBar "", False
  581.  
  582. End Sub
  583.  
  584. Sub NextButton_Click ()
  585.    Dim c As Integer      'current column
  586.  
  587.    On Error GoTo GoNextError
  588.  
  589.    c = cGrid.Col
  590.    cGrid.Col = 0
  591.    If cGrid.Text = "" Then
  592.      Beep
  593.    ElseIf cGrid.Row = gwMaxGridRows Then
  594.      MoreButton_Click
  595.    Else
  596.      cGrid.SetFocus
  597.      SendKeys "{Down}"
  598.    End If
  599.    cGrid.Col = c
  600.  
  601.    GoTo GoNextEnd
  602.  
  603. GoNextError:
  604.    ShowError
  605.    Resume GoNextEnd
  606.  
  607. GoNextEnd:
  608.  
  609. End Sub
  610.  
  611. 'needed for multi-user situations so
  612. 'new records can be viewed imediately
  613. Sub RefreshButton_Click ()
  614.    Dim numbrows As Long
  615.  
  616.    On Error GoTo RefreshError
  617.  
  618.    MsgBar "Reopening Dynaset", True
  619.    SetHourGlass Me
  620. '   Set FDS = gCurrentDB.CreateDynaset(FDS.Name)
  621.    Set FDS = gCurrentDB.CreateSnapshot(FDS.Name)
  622.  
  623.    FNumbRows = GetNumbRecsSS(FDS)
  624.    If FNumbRows = -1 Then
  625.      'error occurred but go on anyway
  626.      'because row count is non-critical
  627.      Caption = "Dynaset: " + FTblName
  628.      numbrows = gwMaxGridRows
  629.      FCurrentRow = numbrows
  630.    ElseIf FNumbRows = 0 Then
  631.      Beep
  632.      MsgBox "No Records found!", 48
  633.      ResetMouse Me
  634.      Unload Me
  635.    ElseIf FNumbRows > gwMaxGridRows Then
  636.      Caption = "Dynaset: " + FTblName + " [" + CStr(FNumbRows) + " total rows]"
  637.      numbrows = gwMaxGridRows
  638.      FCurrentRow = numbrows
  639.    Else
  640.      numbrows = FNumbRows
  641.      Caption = "Dynaset: " + FTblName + " [" + CStr(FNumbRows) + " rows]"
  642.    End If
  643.  
  644.    If LoadGrid(cGrid, FDS, FDynSt, numbrows, 0) = False Then
  645.      Unload Me
  646.      Exit Sub
  647.    End If
  648.  
  649.   GoTo RefreshEnd
  650.  
  651. RefreshError:
  652.   ShowError
  653.   Resume RefreshEnd
  654.  
  655. RefreshEnd:
  656.   ResetMouse Me
  657.   MsgBar "", False
  658.  
  659. End Sub
  660.  
  661. Sub SortButton_Click ()
  662.   On Error GoTo SortErr
  663.  
  664. '  Dim ds1 As dynaset, ds2 As dynaset
  665.   Dim ds1 As snapshot, ds2 As snapshot
  666.   
  667.   Dim numbrows As Long    'local number of rows
  668.  
  669.   Set ds1 = FDS            'save the dynaset
  670. Dim i As Integer, r As Integer, c As Integer
  671.  
  672.    'On Error GoTo FindErr
  673.  
  674.    'load the column names into the filter form
  675.    'the 1st time it is loaded
  676.    If fSort.cFieldList.ListCount = 0 Then
  677.      fSort.cFieldList.Clear
  678.      r = cGrid.Row
  679.      c = cGrid.Col
  680.      cGrid.Row = 0
  681.      cGrid.Col = 0
  682.      For i = 1 To cGrid.Cols - 1
  683.        cGrid.Col = cGrid.Col + 1
  684.        fSort.cFieldList.AddItem cGrid.Text
  685.      Next
  686.      cGrid.Row = r
  687.      cGrid.Col = c
  688.    End If
  689.   
  690.   fSort.Show MODAL
  691.   'SortStr = InputBox("Enter Sort Column:")
  692.   If SortStr = "" Then Exit Sub
  693.  
  694.   FDS.Sort = SortStr
  695. '  Set ds2 = FDS.CreateDynaset()            'establish the Sort
  696.   Set ds2 = FDS.CreateSnapshot()            'establish the Sort
  697.   Set FDS = ds2            'assign back to original dynaset object
  698.  
  699.   'everything must be okay so redisplay form on 1st record
  700.   FNumbRows = GetNumbRecsSS(FDS)          'query numb of recs
  701.    If FNumbRows = -1 Then
  702.      'error occurred but go on anyway
  703.      'because row count is non-critical
  704.      Caption = "Dynaset: " + FTblName
  705.      numbrows = gwMaxGridRows
  706.      FCurrentRow = numbrows
  707.    ElseIf FNumbRows = 0 Then
  708.      Beep
  709.      MsgBox "No Records found!", 48
  710.      ResetMouse Me
  711.      Unload Me
  712.      Exit Sub
  713.    ElseIf FNumbRows > gwMaxGridRows Then
  714.      Caption = "Dynaset: " + FTblName + " [" + CStr(FNumbRows) + " total rows]"
  715.      numbrows = gwMaxGridRows
  716.      FCurrentRow = numbrows
  717.    Else
  718.      numbrows = FNumbRows
  719.      Caption = "Dynaset: " + FTblName + " [" + CStr(FNumbRows) + " rows]"
  720.    End If
  721.   If LoadGrid(cGrid, FDS, FDynSt, numbrows, 0) = False Then
  722.     Unload Me
  723.     Exit Sub
  724.   End If
  725.   GoTo SortEnd
  726.  
  727. SortErr:
  728.   ShowError
  729.   Set FDS = ds1            're-assign back to original
  730.   Resume SortEnd
  731.  
  732. SortEnd:
  733.  
  734. End Sub
  735.  
  736.